package top.beiermode.geektime.context;

import java.util.List;

/**
 * 组件上下文
 *
 * @author Chen Song
 * @since
 */
public interface ComponentContext {

    /**
     * 初始化
     */
    void init();

    /**
     * 销毁
     */
    void destroy();

    /**
     * 通过名称查找组件对象
     * 
     * @param name 组件名称
     * @param <C>  组件类型
     * @return 找不到返回 <code>null</code>
     */
    <C> C getComponent(String name);

    /**
     * 获取所有的组件名称
     *
     * @return 名称集合
     */
    List<String> getComponentNames();
}
